ORIENTACIÓN A
EXPRESIONES

“Todo lenguaje ideal debe basarse en el concepto de ‘expresión’, una representación de signos y símbolos” (Alfred North Whitehead)

“La expresión y el pensamiento son una sola cosa” (Peirce)



MENTAL es un lenguaje orientado a expresiones

Mediante una expresión se puede especificar cualquier estructura de información: una función, una secuencia, un conjunto, un procedimiento, un objeto, una regla, una función de orden superior, una regla de orden superior, etc.


Expresiones simples y compuestas

Una expresión simple (o átomo) es un dígito o una letra (minúscula o mayúscula) o un carácter especial o un símbolo de operador. Ejemplos de expresiones simples son: Una expresión compuesta es la que contiene más de un átomo, por ejemplo:

Pepe 31z EstadoCivil (x+y+z) 4*x {a b c}


Jerarquía de expresiones. Subexpresiones y superexpresiones

Una expresión se puede componer de otras expresiones, y éstas a su vez de otras, y así sucesivamente en una estructura de tipo jerárquico. Dada una expresión x, hay que considerar:
  1. Subexpresiones.
    Son las que están contenidas o forman parte de x.

  2. Superexpresiones.
    Son las que contienen a x.
Ejemplos:
  1. (a b c d) // contiene las subexpresiones a, b, c, d

  2. (a+b+c) // contiene las subexpresiones a, +, b, +, c

  3. a+(b*c)+d

    Contiene las subexpresiones: a, +, (b*c), +, d.
    A su vez, (b*c) contiene las subexpresiones: b, *, c
    En este caso, b es una sub-subexpresión de la expresión inicial y ésta una super-superexpresión de b.

Expresiones consistentes e inconsistentes

Una expresión es consistente cuando se ajusta a las normas de escritura de paréntesis, e inconsistente cuando no se ajusta.

Por ejemplo, las expresiones siguientes son consistentes:

(a bc x*y) (1+…+9) {a (b c)}

y las siguientes son inconsistentes: En MENTAL, cuando hablamos de una expresión, en general, nos estamos refiriendo a expresiones consistentes.

MENTAL es un lenguaje totalmente flexible. Permite combinar expresiones sin restricciones, aún siendo incorrectas semánticamente en un cierto momento (aunque posteriormente pueden dejar de serlo). Ejemplo:

(x = (a + + + b)) // semánticamente incorrecta

x/(+ = c) // sustituir + por c. El resultado es (a c c c b)



Continente y contenido

Se denomina “continente” (o “contexto”) de una expresión a la expresión de orden inmediato superior (superexpresión) en la que está contenida. Por ejemplo, si tenemos la expresión

(z = ((a+b)*c)¸(d-e))

entonces el contexto de: El contenido de una expresión son todos los componentes (subexpresiones de nivel inmediato inferior) de dicha expresión. Por ejemplo, el contenido de (3 5 7) son los elementos 3, 5 y 7. Y el contenido de (a+(b*c)) son las expresiones a, + y (b*c).


Comentarios

Se especifican la derecha de los símbolos //. Ejemplos:
  1. (x = x+1) // sumar 1 a x

  2. // esto es un comentario

Expresiones constructivas, descriptivas e informativas

Las expresiones pueden ser:
Expresiones activas y pasivas

Una expresión pasiva es la que no contiene ningún operador constructivo, y por lo tanto se autoevalúan. Corresponden a los datos de los lenguajes tradicionales. Por ejemplo: Una expresión activa es la que especifica una acción a realizar y que contiene al menos un operador constructivo, por ejemplo: Corresponden a las instrucciones o sentencias de los lenguajes tradicionales.

Una expresión activa puede crear, modificar o eliminar otras expresiones (tanto activas como pasivas). Por ejemplo:
Expresiones extensivas e intensivas

Una expresión extensiva es aquella que se especifica mediante todos sus componentes, por ejemplo, Una expresión intensiva es aquella que incluye uno o varios parámetros. Por ejemplo,

⟨( f(x y) = (2*x + y + 1) )⟩

Esta expresión describe a todas las expresiones de la forma especificada, en las que x e y son parámetros que representan a cualquier expresión.


Expresiones serie y paralela

Una expresión serie (también llamada “secuencia”) es aquella en la que sus componentes están estructurados de forma secuencial (espacial y temporalmente), y se evalúan en serie, uno tras otro, de izquierda a derecha. Una expresión serie se distingue porque sus delimitadores son paréntesis curvos (explícitos o implícitos).

Ejemplo: Una expresión paralela (también llamada “conjunto”) es aquella en la que sus componentes están estructurados de forma conjunta (espacial y temporalmente), y se evalúan a la vez, simultáneamente, en paralelo. Una expresión paralela se distingue porque sus paréntesis delimitadores son de tipo llave.

Ejemplo: En este caso, como se ve, no se consideran los nuevos valores de x e y dentro del conjunto


Expresiones abiertas y cerradas

Una expresión cerrada es la que está delimitada por paréntesis curvos o llaves: Una expresión abierta es la que se obtiene a través del operador primitivo , es decir, al acceder al contenido de una expresión (obteniéndose los componentes del primer nivel):
Operadores simétricos y asimétricos

Los símbolos de los operadores son de dos tipos:
  1. Los simétricos lateralmente. Por ejemplo, ≡ +. Esto quiere decir que los argumentos son intercambiables. Ejemplos:

    x+y // equivale a y+x
    x≡y // equivale a y≡x


  2. Los asimétricos (no simétricos lateralmente). Por ejemplo, o <
    Indican diferenciar los argumentos a ambos lados del operador. Ejemplos:

    (x ← y) // x si y
    (y → x) // si y, entonces x

Expresiones estáticas y dinámicas

Una expresión estática es una expresión que siempre produce la misma expresión al evaluarse (se autoevalúa).

Una expresión dinámica es una expresión que cambia su evaluación con el tiempo.

Las expresiones activas y pasivas pueden ser estáticas o dinámicas.

Ejemplos:
  1. (texto = "abcd")
    ...
    (texto = "efgh")
    ...


    Las expresiones "abcd" y "efgh" son estáticas, pues se evalúan siempre igual (se autoevalúan).

    Las dos expresiones de sustitución también son estáticas, pues siempre se evalúan igual, respectivamente, a:

    (texto = "abcd") y (texto = "efgh")

    La expresión texto es dinámica, pues su evaluación varía a lo largo de la ejecución del programa.

  2. (n = 1)
    (n<5 → (n = n+1))


    Las expresiones siguientes son dinámicas:

    n<5 y n de esta misma expresión

    (n = n+1), n y n+1 de esta misma expresión

    Y las expresiones siguientes son estáticas:


Meta-expresiones

Son expresiones que hacen referencia a expresiones. Forman lo que podemos denominar “triada existencial”: θ-α-Ω (nada-algo-todo), en donde α (algo) actúa de mediador entre las otras dos: nada (θ) y todo (Ω).
  1. Expresión existencial negativa o nula (θ).
    Indica la no existencia de ninguna expresión. Es equivalente a “nada”.

    Cuando una expresión se sustituye por la expresión nula, dicha expresión desaparece (se elimina).

    Como la expresión nula (θ) tiene las propiedades


    entonces &theta se comporta como el operador identidad, pues al actuar sobre cualquier expresión x produce la misma expresión.

    Hay que distinguir entre vacío, nulo y neutro:


  2. Expresión existencial positiva (α).
    Indica la existencia de una expresión, de cualquier expresión (excepto la expresión nula), pero ninguna en particular.

  3. Expresión universal (Ω).
    Indica todas las infinitas posibles expresiones concretas que pueden formarse con el lenguaje. Las metaexpresiones (θ, α, Ω) no están incluidas porque no son expresiones concretas.

Combinatoria de tipos de expresiones

Como las categorías de tipos de expresiones son independientes, puede haber: Hay que resaltar que el papel de las expresiones puede cambiar con el tiempo. Por ejemplo, una expresión activa estática se puede convertir en otro momento en pasiva dinámica, etc.


Conjuntos de números por defecto

N. Conjunto de los números naturales (incluido el cero).

Z. Conjunto de los números enteros (incluido el cero).
Z/+. Conjunto de los números enteros positivos.
Z/−. Conjunto de los números enteros negativos.

R. Conjunto de los números reales (incluido el cero).
R/+. Conjunto de los números reales positivos.
R/−. Conjunto de los números reales negativos.


Nomenclatura para los nombres de las variables numéricas

Las constantes matemáticas se representan con una letra en cursiva, excepto π y φ (proporción áurea). Por ejemplo: i (unidad imaginaria) y e (constante de Euler). Estos nombres, sin cursiva, pueden utilizarse en las aplicaciones.

En algunos lenguajes de programación se suele aplicar el criterio de que la inicial del nombre de una variable indica el tipo de dato asociado. Su motivación era básicamente implementadora. En MENTAL se utiliza el convenio de la primera letra para indicar el tipo de número, y su motivación es la simplificación: evitar especificar el tipo de variable. Por ejemplo, (n + i*r) indica un número complejo de parte real un número natural y de parte imaginaria un número real.

Ejemplos:
  1. El conjunto de números naturales mayores que 5:
    ⟨( nn>5 ← nN)⟩

    Esta expresión se puede simplificar a ⟨( nn>5 )⟩ , pues no hace falta especificar que n es un número natural.

  2. El conjunto de números reales mayores que 5:
    ⟨( rr>5 ← rR)⟩

    Esta expresión se puede simplificar a ⟨( rr>5 )⟩, pues no hace falta especificar que r es un número real.

Propiedades intrínsecas y extrínsecas

Hay dos tipos de propiedades: intrínsecas y extrínsecas.